package h0706;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 不知名帅哥
 * @version 1.0
 * @description 爱吃蟠桃的孙悟空
 * @date 2024/7/6 22:41
 */
public class LoveEatPeachesSunwuKong {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int H = scanner.nextInt();

        //吃掉所有蟠桃的最小速度 K，无解或输入异常时输出 0。吃掉所有蟠桃的最小速度 K，无解或输入异常时输出 0。
        int[] peaches = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray();
        if (H < peaches.length) {
            System.out.println(0);
        } else {
//            Arrays.sort(peaches);
//            int m = H - peaches.length;
//            System.out.println(peaches[peaches.length - 1 - m]);
            System.out.println(getResult(peaches, H));
        }
        //上面的方法不适用于一般情况一旦，小时变多，就有问题，比如 4 11 20 23 30 8个小时，如果取11明显不符合题意。
        //正确答案是15
    }

    public static int getResult(int[] peaches, int h) {
        int max = Arrays.stream(peaches).max().orElse(0);

        int min = 1;
        //如果桃树数量就是h棵
        if (peaches.length == h) {
            return max;
        }
        //当桃树数量小于h棵的时候，以max速度肯定吃得完，但是不一定是最优解
        int ans = max;
        //使用二分法
        while (min <= max) {
            int speed = (min + max) >> 1;
            if (check(speed, h, peaches)) {
                ans = speed;
                //继续尝试更小的速度
                max = speed - 1;
            } else {
                //以mid(speed)速度无法在h小时内吃完所有桃子，证明取小了，应该取更大的范围
                min = speed + 1;
            }
        }
        return ans;
    }

    //检查当前速度是否满足
    public static boolean check(int speed, int limit, int[] array) {
        //已花费时间
        int cost = 0;
        for (int arr : array) {
            //以speed速度吃完一棵桃树的时间
            cost += arr / speed + (arr % speed > 0 ? 1 : 0);

            //如果超出了限制时间，返回false
            if (cost > limit) {
                return false;
            }
        }
        return true;
    }
}
